#define  _CRT_SECURE_NO_WARNINGS
class Solution {
public:
    int m, n;
    int dx[8] = { 0, 0, 1, -1, 1, 1, -1, -1 };
    int dy[8] = { 1, -1, 0, 0, 1, -1, 1, -1 };

    vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
        int i = click[0], j = click[1];
        m = board.size(), n = board[0].size();


        if (board[i][j] == 'M')
        {
            board[i][j] = 'X';
            return board;
        }

        dfs(board, i, j);

        return board;
    }

    void dfs(vector<vector<char>>& board, int i, int j)
    {

        int count = 0;
        for (int k = 0;k < 8;k++)
        {

            int x = i + dx[k], y = j + dy[k];
            if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'M')
            {
                count++;

            }
        }

        if (count == 0)
        {
            board[i][j] = 'B';
            for (int k = 0;k < 8;k++)
            {

                int x = i + dx[k], y = j + dy[k];
                if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'E')
                {
                    dfs(board, x, y);
                }
            }

        }

        else
        {
            board[i][j] = count + '0';
            return;
        }
    }
};